package com.smart.community.order.service.impl;

import com.smart.community.order.common.dto.CartDTO;
import com.smart.community.order.common.dto.OrderDTO;
import com.smart.community.order.common.utils.OrderUtils;
import com.smart.community.order.service.CartsService;
import com.smart.community.order.service.OrderService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.DoubleStream;

/**
 * @author zhangwei
 */
@Service
public class OrderServiceImpl implements OrderService {
    @Resource
    private CartsService cartsService;

    @Override
    public String confirmOrder() {
        return null;
    }

    /**
     * 1.  通过购物车ID查询购物车商品信息
     * 2.  生成订单号
     * 3.  保存订单信息
     * 4.  保存订单详细信息
     * 5.  扣减库存    幂等性    去重表  分布式锁
     * 6.  自动取消订单
     * 7.  优惠卷结算    总金额  优惠总金额   更新优惠卷的状态
     * 8.  删除购物车信息
     *
     * @param
     * @return
     */
    @Override
    public String createOrder(OrderDTO order) {
        List<CartDTO> cartList = cartsService.batchCarts(order.getCartIds());
        // 计算总金额
        //  商品总金额  += 商品单价 *  商品数量
        //  Stream 流   BigDecimal
        // BigDecimal 构造方法  使用String 类型
        //  保留小数点 scale 保留小数点
        //  返回的都是一个新的对象
//        商品总金额
        BigDecimal total = BigDecimal.valueOf(cartList.stream().flatMapToDouble(carts -> DoubleStream.of(carts.getPrice().multiply(new BigDecimal(carts.getQuantity())).doubleValue())).sum());
        /*
         * 生成订单号
         */
        String orderNo = OrderUtils.generateOrderNo(order.getPlatForm(), order.getOrderType());
        /**
         * 优惠信息
         */

        // 优惠卷码
        return null;
    }


}
